define [
  'chaplin',
  'lib/feedback'
  'lib/enums'
], (Chaplin, Feedback, Enums) ->

  ajaxSetup =
    error: (error, ajaxOptions, thrownError) ->
      # Mensagens que não devem disparar exceção e alertas automáricos para o usuário
      noExcepMessages = ['usuario.inativo', 'usuario.termo.invalido']

      # Tenta pegar a mensagem de erro retornada pelo server
      if error.responseJSON and error.responseJSON.message
        errorMessage = error.responseJSON.message
      else
        try
          errorMessage = JSON.parse(error.responseText).message
        catch e
          errorMessage = error.responseText

      if !errorMessage
        errorMessage = 'Um erro inexperado aconteceu. Tente novamente em alguns minutos.'

      # Se o erro for de sessão expirada, deve receber tratamento diferenciado
      if error.status is 401
        # Chaplin.EventBroker.publishEvent 'feedback:error', Enums.messages['sessao.expirada']
        window.location.hash = '#login'
      if _.indexOf(noExcepMessages, errorMessage) < 0 and error.status != 200 and error.status != 401
        Chaplin.EventBroker.publishEvent 'feedback:error', Enums.messages[errorMessage] or errorMessage